package br.com.divulgaqui.persistence.daoimpl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.divulgaqui.entity.ItemVenda;
import br.com.divulgaqui.entity.Pessoa;
import br.com.divulgaqui.entity.Venda;
import br.com.divulgaqui.persistence.dao.JPAGenericDAO;
import br.com.divulgaqui.persistence.dao.VendaDAO;

public class VendaDAOImpl extends JPAGenericDAO<Venda> implements VendaDAO{

	public VendaDAOImpl(EntityManager entityManager) {
		super(entityManager);		
	}

	@Override
	public void salvarItemVenda(ItemVenda itemVenda) {		
		getEntityManager().persist(itemVenda);
	}

	@Override
	public Venda salvarVenda(Venda venda) {		
		return getEntityManager().merge(venda);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Venda> vendasCliente(Pessoa pessoa) {
		StringBuilder sb = new StringBuilder("from Venda v \n");
		sb.append("left outer join fetch v.inItensVenda it\n");
		sb.append("left outer join fetch it.pacoteAnuncio \n");
		sb.append("where v.pessoa.id = "+pessoa.getId());
		Query query = getEntityManager().createQuery(sb.toString());
		return query.getResultList();
	}

	@Override
	public List<Pessoa> recuperarQtpPacotesAnunciosPorClientes() {
		StringBuilder sb = new StringBuilder("from Pessoa p \n");
		sb.append("left outer join fetch p.telefones");
		Query query = getEntityManager().createQuery(sb.toString());
		@SuppressWarnings("unchecked")
		List<Pessoa> pessoas = query.getResultList();
		for(Pessoa p : pessoas){
			p.setVendas(vendasCliente(p));
		}		
		return pessoas;
	}
}
